import type { PluginOption } from 'vite'

import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'

import { AutoImportDeps } from './autoImport'

import { AutoRegistryComponents } from './component'
import { ConfigDevToolsPlugin } from './devtools'
import { ConfigSvgIconsPlugin } from './icon'
import { ConfigProgressPlugin } from './progress'
import { styleImportPlugin } from './styleImport'

import { ConfigUnocssPlugin } from './unocss'
import { ConfigVisualizerPlugin } from './visualizer'

export function createVitePlugins(/** 环境变量 */ _viteEnv: ViteEnv, /** 打包 */ isBuild: boolean) {
  const vitePlugins: (PluginOption | PluginOption[])[] = [
    // vue支持
    vue({
      template: {
        compilerOptions: {
          isCustomElement: (tag) => tag.startsWith('i-')
        }
      }
    }),

    // JSX支持
    vueJsx(),

    // 提供https证书
    // VitePluginCertificate({
    //   source: 'coding',
    // }),

    /** icon */
    ConfigSvgIconsPlugin(),

    /** 自动按需引入依赖 */
    AutoImportDeps(),

    /** 自动按需引入组件 */
    AutoRegistryComponents(),

    styleImportPlugin(),

    /** unocss */
    ConfigUnocssPlugin(),

    /** vite devtools */
    ConfigDevToolsPlugin()
  ]

  if (isBuild) {
    /** 构建时显示进度条 */
    vitePlugins.push(ConfigProgressPlugin())

    /** rollup-plugin-visualizer */
    vitePlugins.push(ConfigVisualizerPlugin())
  }

  return vitePlugins
}
